/*
 * Copyright 2010-2013 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.thinkcube.edutainment.login;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;

import com.thinkcube.edutainment.EduApplication;
import com.thinkcube.edutainment.R;

@SuppressLint("SetJavaScriptEnabled")
public abstract class AbstractWebViewActivity extends Activity implements
		AsyncActivity {

	protected static final String TAG = AbstractWebViewActivity.class
			.getSimpleName();

	private Activity activity;

	private WebView webView;

	private ProgressDialog progressDialog = null;

	private final boolean destroyed = false;

	// ***************************************
	// Activity methods
	// ***************************************
	@Override
	public EduApplication getApplicationContext() {
		return (EduApplication) super.getApplicationContext();
	}

	final class MyWebChromeClient extends WebChromeClient {
		@Override
		public boolean onJsAlert(WebView view, String url, String message,
				JsResult result) {
			Log.d(TAG, message);
			result.confirm();
			return true;
		}
	}

	@Override
	public void onCreate(final Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		getWindow().requestFeature(Window.FEATURE_PROGRESS);
		getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
				Window.PROGRESS_VISIBILITY_ON);
		this.webView = new WebView(this);
		// this.webView.setWebChromeClient(new MyWebChromeClient());

		// this.webView.getSettings().setJavaScriptEnabled(true);
		// WebSettings settings = getWebView().getSettings();
		this.webView.getSettings().setSupportMultipleWindows(true);
		this.webView.getSettings().setJavaScriptEnabled(true);
		this.webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(
				true);

		this.webView.getSettings().setBuiltInZoomControls(true);
		this.webView.getSettings().setSupportZoom(true);
		this.webView.getSettings().setSupportMultipleWindows(true);
		this.webView.getSettings().setLoadWithOverviewMode(false);

		// this.webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
		this.webView.getSettings().setUseWideViewPort(false);

		// shanuka

		this.webView.setWebChromeClient(new WebChromeClient() {

			@Override
			public boolean onJsAlert(WebView view, String url, String message,
					JsResult result) {
				Log.d(TAG, message);
				result.confirm();
				return true;
			}

			@Override
			public void onProgressChanged(final WebView view, final int progress) {
				activity.setTitle("Loading...");
				activity.setProgress(progress * 100);

				if (progress == 100) {
					activity.setTitle(R.string.app_name);
				}
			}
		});

		setContentView(webView);
		this.activity = this;

	}

	// ***************************************
	// Protected methods
	// ***************************************
	protected WebView getWebView() {
		return this.webView;
	}

	// ***************************************
	// Public methods
	// ***************************************
	@Override
	public void showLoadingProgressDialog() {
		showProgressDialog("Loading. Please wait...");
	}

	@Override
	public void showProgressDialog(final CharSequence message) {
		if (this.progressDialog == null) {
			this.progressDialog = new ProgressDialog(this);
			this.progressDialog.setIndeterminate(true);
		}

		this.progressDialog.setMessage(message);
		this.progressDialog.show();
	}

	@Override
	public void dismissProgressDialog() {
		if (this.progressDialog != null && !this.destroyed) {
			this.progressDialog.dismiss();
		}
	}

}
